/**
 * 获取当月有多少天
 * @param {String|Number} year=>年
 * @param {String|Number} month=>月
 */
const getMothDays = (year,month) => {
  let days = new Date(year,month + 1, 0).getDate();
  return days
}

const toDou = (num) => {
  return num>9?num:"0"+num;
}

/**
 * 转换为日期格式
 * @param {*} date
 */
const transformDate = date => {
  if (!(date instanceof Date)) {
    date = new Date(date)
  }
  return date
}

/**
 * 获取当前日期的年月日
 * @param {any} date => 日期对象
 */
const getDateObj = date => {
  date = transformDate(date);
  var year = date.getFullYear();
  var month = date.getMonth() + 1;
  var day = date.getDate();
  return {
    year,
    month,
    day,
    dataStr:`${year}/${toDou(month)}/${toDou(day)}`,
  };
}

/**
 * 获取当月1号的时间
 * @param {Date} date => 日期对象
 */
const startOfMonth = date => {
  return date.setDate(1);
};

// 获取今天，导出共组件作为默认值使用
const { dataStr } = getDateObj(new Date());

/**
 * 生成日历数据
 * @param {Date} date => 日期对象
 */
const getDate = date => {
  date = transformDate(date);
  // 计算需要补的格子
  let dist;
  const { year,month } =getDateObj(date);
  // 获取当前月有多少天
  const days = getMothDays( year, month - 1);
  // 获取当前日期是星期几
  let currentDate  = new Date(startOfMonth(date)).getDay();
  // 将第一天为第七天
  if(currentDate == 0){
    currentDate == 7;
  }
  dist = currentDate - 1;
  currentDate -= 2;
  const res = [];
  for(let i=0;i<=34;i++){
    // 是否当前月
    const otherMonth = i >= dist + days || i<= currentDate;
    const date = new Date(year, month - 1, -currentDate + i);
    const dateObj = getDateObj(date);
    res.push({
      ...dateObj,
      today:dataStr === dateObj.dataStr,
      otherMonth
    });
  }
  return res;
}
function formatDate (now){
  var date = new Date(now)
  var y = date.getFullYear() // 年份
  var m = date.getMonth() + 1 // 月份，注意：js里的月要加1
  if(m<10){
  m="0"+m;
  }
  var d = date.getDate() // 日
  if(d<10){
  d="0"+d;
  }
  var h = date.getHours() // 小时
  if(h<10){
  h="0"+h;
  }
  var min = date.getMinutes() // 分钟
  if(min<10){
  min="0"+min;
  }
  var s = date.getSeconds() // 秒
  if(s<10){
  s="0"+s;
  }
  // 返回值，根据自己需求调整，现在已经拿到了年月日时分秒了
  return y + '-' + m + '-' + d + ' ' + h + ':' + min + ':' + s
}

module.exports = {
  getMothDays,
  toDou,
  getDateObj,
  startOfMonth,
  getDate,
  dataStr,
  transformDate,
  formatDate
};